package org.dreamwork.jasmine2.engine;

import org.dreamwork.jasmine2.events.*;

/**
 * 服务器端控件
 *
 * <p>服务器端控件是一组特殊的 jasmine 控件。若一个 jasmine 控件被标注为服务器端控件，jamine 引擎将在运行期缓存这些控件
 * 以备应用程序使用。
 * <p>服务器端控件定义了2组接口，分别用于处理控件渲染前的时间和控件销毁事件；分别向服务器端控件添加2中事件监听器来完成相应操作
 *
 * Created by IntelliJ IDEA.
 * User: seth
 * Date: 2009-1-30
 * Time: 23:19:16
 */
public interface IServerSideControl {
    // events

    /**
     * 添加渲染监听器
     * @param listener 监听器
     */
    void addPreRenderEvent (IPrerenderListener listener);

    /**
     * 删除渲染监听器
     * @param listener 监听器
     */
    void removePreRenderEvent (IPrerenderListener listener);

    /**
     * 触发渲染事件
     * @throws EventException 事件异常
     */
    void firePreRenderEvents () throws EventException;

    /**
     * 获取所有渲染监听器
     * @return 所有渲染监听器
     */
    IPrerenderListener[] getPreRenderEvents ();

    /**
     * 添加销毁监听器
     * @param listener 监听器
     */
    void addDisposeEvent (IDisposeListener listener);

    /**
     * 删除销毁监听器
     * @param listener 监听器
     */
    void removeDisposeEvent (IDisposeListener listener);

    /**
     * 触发销毁事件
     * @throws EventException 事件异常
     */
    void fireDisposeEvents () throws EventException;

    /**
     * 获取所有销毁事件监听器
     * @return 所有销毁事件监听器 
     */
    IDisposeListener[] getDisposeEvents ();

/*
    void addServerSideListener (IServerSideListener listener);
    void removeServerSideListener (IServerSideListener listener);
    void fireServerSideListener (ServerSideEvent event);
    IServerSideListener[] getServerSideListeners ();
*/
}